Данная задача возникает часто при отладке. Хочется видеть список сообщений, которые поступают скажем в диалоговое окно. При том посмотреть их в виде лог файла. Или еще чего. Есть ряд средств, например, SPY, которые позволяют это сделать. Только зачем, если у нас есть исходный код.
Создавайте проект MFC AppWizard на основе диалогового окна по максимуму отключив все кнопки. Теперь давайте создадим функцию PreTranslateMessage, на ней просто надо щелкнуть два раза и она появится в исходном коде.

Мы хотим вести лог файл только при отладке. Поэтому все, что относится к логу мы заключим в следующие операторы
#ifdef _DEBUG // это включиться только в режими отладки. #endifВключаем библиотеку файловых потоков
#include "TestEnterDlg.h" #ifdef _DEBUG #include "fstream.h" #endifВ конструкторе создаем поток.
CTestEnterDlg::CTestEnterDlg(CWnd* pParent /*=NULL*/)
: CDialog(CTestEnterDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CTestEnterDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
#ifdef _DEBUG
ofs.open("log.txt");
#endif
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
Во время закрытия окна закрываем. Для этого необходимо создать функцию
DestroyWindow. Её тоже можно создать в ClassWizard. BOOL CTestEnterDlg::DestroyWindow()
{
// TODO: Add your specialized code here and/or call the base class
#ifdef _DEBUG
ofs.close();
#endif
return CDialog::DestroyWindow();
}
Ну и теперь то, что нас интересует. BOOL CTestEnterDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
#ifdef _DEBUG
ofs << pMsg->message << endl;
#endif
return CDialog::PreTranslateMessage(pMsg);
}
Теперь если запустить именно отладочную версию Debug, а не реализ,
то при работе программы будет создан лог файл. Что в нем ???? Вот что .... 160 160 512 512 512 512 512 ...Что это за сообщения ? Это сообщения в десятичном формате. Их надо перевести в шестнадцатеричный. Для этого можно воспользоваться обычным калькулятором. Поставьте научный вид. Переключитесь на DEC, введите десятичное число, а потом на Hex и увидите число в шестнадцатеричном виде.
Для интерпретации осталось немного. Первое, открыть файл WinUser.h. Там есть сообщения, они начинаются в WM_. Так давайте посмотрим, что это за 512.
512->200 #define WM_MOUSEFIRST 0x0200 #define WM_MOUSEMOVE 0x0200
Это двигалась мышка !!!